package co.edu.ucatolica.sislab.persistence.utils;

import java.util.Hashtable;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DriverConfigurator {
	/**
	 * Logger
	 */
	private Logger logger = LoggerFactory.getLogger(DriverConfigurator.class);
	
	/**
	 * Datos de conexion a las diferentes bases de datos
	 */
	private Hashtable<String, ConnectionInformation> datosConexion;
	    
    /**
     * Unica instancia de la clase (Singleton)
     */
    private static DriverConfigurator instancia = new DriverConfigurator();

    /** 
     * Prefijo para los archivos por defecto que contienen las propiedades de conexion.
     */
    private static final String PREFIX_CONNECTION_INFO = "SISLAB/config/";

    /**
     * Constructor por defecto
     */
    private DriverConfigurator(){
    	datosConexion = new Hashtable<String, ConnectionInformation>();
        inicializarDrivers();
    }
    
    /**
     * Inicializa el driver de acuerdo con los valores de conexión.
     */
    private void inicializarDrivers( ) {
        try {
        	for ( DatabaseTypes dt : DatabaseTypes.values() ) {
        		String archivo = PREFIX_CONNECTION_INFO + dt.getConnectionFile();
        		/*InputStream is = new FileInputStream( archivo );
                Properties propiedadesConsulta = new Properties();

                propiedadesConsulta.load(is);
                String usuario = propiedadesConsulta.getProperty("jdbcUser");
                String password = propiedadesConsulta.getProperty("jdbcPassword");
                String driver = propiedadesConsulta.getProperty("jdbcDriver");
                String url = propiedadesConsulta.getProperty("jdbcUrl");*/
                String usuario = "root";
                String password = "";
                String driver = "com.mysql.jdbc.Driver";
                String url = "jdbc:mysql://localhost:3306/sistema_catolica";
                Class.forName(driver);
                
                ConnectionInformation c = new ConnectionInformation();
                c.setDriver(driver);
                c.setPassword(password);
                c.setUrl(url);
                c.setUsuario(usuario);
        		datosConexion.put( dt.toString(), c );
        	}
        /*} catch (IOException e1) {
            logger.error("Error cargando el archivo: " + e1.toString());*/
        } catch (ClassNotFoundException e) {
        	logger.error("Error la clase indicada en el driver no existe: " + e.toString());
        } catch (Exception e) {
        	logger.error("No es posible cargar los parametros de la base de datos: " + e.toString());
        }
        
    }

    /**
     * Retorna la instancia de la clase.
     * @return Instancia de la clase
     */
    public static DriverConfigurator getInstancia() {
        return instancia;
    }

    /**
     * Retorna los datos de conexion para la base de datos indicada
     * @param d Tipo de base de datos
     * @return Informacion de conexion o null en caso que no exista
     */
    public ConnectionInformation getConnectionInformation( DatabaseTypes d ) {
    	return datosConexion.get(d.toString());
    }
}
